const { User } = require("../db");
const { Op } = require('sequelize');

// 获取待审核用户列表
exports.getPendingReviewUsers = async (req, res) => {
    try {
        const { page = 1, pageSize = 10 } = req.body;
        
        const users = await User.findAndCountAll({
            where: {
                id_status: 0 // 0表示未审核
            },
            attributes: { exclude: ['password'] },
            offset: (page - 1) * pageSize,
            limit: pageSize
        });
        
        res.send({
            status: 200,
            message: '获取待审核用户列表成功！',
            users: users.rows,
            total: users.count
        });
    } catch (err) {
        console.log(err);
        res.status(500).send('获取待审核用户列表失败');
    }
};

// 审核用户身份
exports.reviewUser = async (req, res) => {
    const { id, status, role } = req.body; // status: 1通过 2拒绝, role: 'counselor'/'assistant'/'admin'
    
    if (!id || !status || (status === 1 && !role)) {
        return res.status(400).send({
            status: 400,
            message: '参数不完整！'
        });
    }

    try {
        const updateData = {
            id_status: status
        };

        // 如果审核通过，设置相应角色
        if (status === 1) {
            switch (role) {
                case 'counselor':
                    updateData.is_counselor = true;
                    break;
                case 'assistant':
                    updateData.is_assistantn = true;
                    break;
                case 'admin':
                    updateData.is_admin = true;
                    break;
                default:
                    return res.status(400).send({
                        status: 400,
                        message: '角色类型不正确！'
                    });
            }
        }

        const [affectedCount] = await User.update(updateData, {
            where: { id }
        });

        if (affectedCount > 0) {
            res.send({
                status: 200,
                message: '审核操作成功！'
            });
        } else {
            res.send({
                status: 404,
                message: '用户不存在！'
            });
        }
    } catch (err) {
        console.log(err);
        res.status(500).send('审核操作失败');
    }
};

// 批量审核用户
exports.batchReviewUsers = async (req, res) => {
    const { userIds, status, role } = req.body;
    
    if (!userIds || !Array.isArray(userIds) || userIds.length === 0 || !status) {
        return res.status(400).send({
            status: 400,
            message: '参数不完整或格式不正确！'
        });
    }

    try {
        const updateData = {
            id_status: status
        };

        // 如果审核通过，设置相应角色
        if (status === 1 && role) {
            switch (role) {
                case 'counselor':
                    updateData.is_counselor = true;
                    break;
                case 'assistant':
                    updateData.is_assistantn = true;
                    break;
                case 'admin':
                    updateData.is_admin = true;
                    break;
                default:
                    return res.status(400).send({
                        status: 400,
                        message: '角色类型不正确！'
                    });
            }
        }

        const result = await User.update(updateData, {
            where: {
                id: {
                    [Op.in]: userIds
                }
            }
        });

        res.send({
            status: 200,
            message: `批量审核成功，共处理${result[0]}条记录！`
        });
    } catch (err) {
        console.log(err);
        res.status(500).send('批量审核失败');
    }
};

// 获取咨询师申请列表
exports.getCounselorApplications = async (req, res) => {
    try {
        const users = await User.findAll({
            where: {
                id_status: 0,
                is_counselor: false // 未成为咨询师但申请中的
            },
            attributes: { exclude: ['password'] }
        });
        
        res.send({
            status: 200,
            message: '获取咨询师申请列表成功！',
            users
        });
    } catch (err) {
        console.log(err);
        res.status(500).send('获取咨询师申请列表失败');
    }
};

// 获取辅导员申请列表
exports.getAssistantApplications = async (req, res) => {
    try {
        const users = await User.findAll({
            where: {
                id_status: 0,
                is_assistantn: false // 未成为辅导员但申请中的
            },
            attributes: { exclude: ['password'] }
        });
        
        res.send({
            status: 200,
            message: '获取辅导员申请列表成功！',
            users
        });
    } catch (err) {
        console.log(err);
        res.status(500).send('获取辅导员申请列表失败');
    }
};

// 用户申请成为咨询师/辅导员
exports.applyForRole = async (req, res) => {
    const { id } = req.user; // 从token中获取用户ID
    const { role } = req.body; // 'counselor' 或 'assistant'
    
    if (!role || (role !== 'counselor' && role !== 'assistant')) {
        return res.status(400).send({
            status: 400,
            message: '请指定申请角色类型！'
        });
    }

    try {
        const user = await User.findByPk(id);
        if (!user) {
            return res.status(404).send({
                status: 404,
                message: '用户不存在！'
            });
        }

        // 检查是否已经是该角色
        if ((role === 'counselor' && user.is_counselor) || 
            (role === 'assistant' && user.is_assistantn)) {
            return res.status(400).send({
                status: 400,
                message: `您已经是${role === 'counselor' ? '咨询师' : '辅导员'}！`
            });
        }

        // 设置申请状态
        await User.update({
            id_status: 0 // 设置为未审核状态
        }, {
            where: { id }
        });

        res.send({
            status: 200,
            message: '申请提交成功，等待管理员审核！'
        });
    } catch (err) {
        console.log(err);
        res.status(500).send('申请提交失败');
    }
};